package com.eddie.libray.reception;

import com.eddie.libray.App;
import com.eddie.libray.LibraryApp;
import com.eddie.libray.LibraryDataSource;
import com.eddie.libray.Menu;
import com.eddie.libray.entity.BookEntity;

import java.util.List;
import java.util.Scanner;

/**
 * 抽象的用户接收器，用于根据不同状态进行不同操作（状态模式父抽象类）
 *
 * @author Eddie
 * @since 2022/09/02 09:09
 **/
public abstract class AbstractReception {

    /**
     * 定义维护图书馆应用，用于子状态的模式切换
     */
    protected LibraryApp app;

    /**
     * 定义构造函数用于子状态之间的图书馆应用传递
     * @param app 图书馆应用
     */
    public AbstractReception(LibraryApp app) {
        this.app = app;
    }

    /**
     * 定义菜单
     */
    protected final Menu menu = new Menu();

    /**
     * 定义scanner接收参数
     */
    protected final Scanner scanner = new Scanner(System.in);

    /**
     * 定义系统维护的书籍数据源
     */
    public final List<BookEntity> books = LibraryDataSource.books;

    /**
     * 启动
     */
    public void start() {
        boolean flag;
        do {
            flag = action();
        } while (flag);
    }

    ;

    /**
     * 用户操作方法，接收用户的操作，返回值为是否继续
     *
     * @return 是否终止操作
     */
    protected abstract boolean action();

}
